import Vue from 'vue'
import App from './App'
import store from './store'
import { http } from 'utils/request/index.js'
import * as api from 'utils/api.js'
// import form from 'utils/form-verify.js'
import upload from 'utils/upload.js'
import { router, RouterMount } from './router'
Vue.use(router)

// 引入全局uView
import uView from 'uview-ui'
Vue.use(uView)

// import httpInterceptor from '@/common/http.interceptor.js'
// Vue.use(httpInterceptor, app)

import {hasPermission, hasNoPermission, hasAnyPermission, hasRole, hasAnyRole} from 'utils/permissionDirect'
const Plugins = [
  // hasPermission,
  // hasNoPermission,
  // hasAnyPermission,
  hasRole,
  hasAnyRole
]

// Plugins.map((plugin) => {
//   Vue.use(plugin)
// })

Vue.config.productionTip = false
App.mpType = 'app'


const app = new Vue({
    ...App
})

Vue.mixin({
	data() {
		return {
			systemInfo: uni.getSystemInfoSync()
		}
	}
})

export default Vue

//v1.3.5起 H5端 你应该去除原有的app.$mount();使用路由自带的渲染方式
// #ifdef H5
	RouterMount(app, router,'#app')
// #endif

// #ifndef H5
	app.$mount(); //为了兼容小程序及app端必须这样写才有效果
// #endif

/**
 * 
 * page 要获取前几页的页面实例，默认是上一页
 * params { key , value } key为变量或方法，value有则修改变量，无则是执行方法
 * back 执行完是否要返回页面，默认不返回
 * delta 返回前几级页面，默认返回上一级
 * 
 * */
function fallback(page = 1, params = {key: '', value: '', back: false, delta: 1}) { // 改变父页面的值或方法
	let pages = getCurrentPages();  //获取所有页面栈实例列表
	let nowPage = pages[pages.length - 1]; // 当前页页面实例
	let prevPage = pages[pages.length - (1 + page)]; //上一页页面实例
	if (!params.value) {
		// #ifdef H5
		prevPage[params.key]()
		// #endif
		// #ifndef H5
		prevPage.$vm[params.key]()
		// #endif
	} else {
		// #ifdef H5
		prevPage[params.key] = params.value
		// #endif
		// #ifndef H5
		prevPage.$vm[params.key] = params.value
		// #endif
	}
	if (params.back) {
		uni.navigateBack({  //uni.navigateTo跳转的返回，默认1为返回上一级
		    delta: params.delta
		});
	}
}


Vue.prototype.$store = store;
Vue.prototype.$http = http;
Vue.prototype.$api = api;
// Vue.prototype.$form = form;
Vue.prototype.$upload = upload;
Vue.prototype.$fallback = fallback;
